package com.qf.controller;


import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.UserServiceImpl;
import com.qf.utils.Constants;
import com.qf.utils.StrUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
 * @author hanjiejie
 * @version V1.0
 * @Project java2203
 * @Package com.qf.controller
 * @Description:
 * @Date 2022/5/23 21:13
 */
@WebServlet("/user")

public class UserController extends BaseServlet {
    /**
     *用户注册 是否可用
     * @param request
     * @param response
     * @throws IOException
     */
    public void check (HttpServletRequest request, HttpServletResponse response) throws IOException {
        //1.获取用户名参数
        String username = request.getParameter("username");
        //2.调用业务层 去数据库里面查找该用户名是否存在，存在不可用。不存在可用
         UserService userService= new UserServiceImpl();
        Boolean b= userService.check(username);
        //3.将是否可用的信息返回到页面
        if (b){
          //用户可以用
            response.getWriter().write(Constants.NOT_HAS_USER);
        }else {
            response.getWriter().write(Constants.HAS_USER);
        }

    }

    /**
     * 消费者  用户登录
     * @param request
     * @param response
     * @return
     */
   public String login(HttpServletRequest request,HttpServletResponse response){
        //获取用户名参数
       String username = request.getParameter("username");
       //获取密码
       String password = request.getParameter("password");
       //获取验证码
       String code = request.getParameter("code");
       //获取用户是否自动登录
       String auto = request.getParameter("auto");
       //判断用户名  密码验证码是否为空
       if (!StrUtils.empty(username) ||!StrUtils.empty(password)||!StrUtils.empty(code)){
            request.setAttribute("msg", "用户名 密码验证码不能为空");
            //跳转到登陆页面
           return  "forward:/login.jsp";
       }
    //校验验证码是否正确 不正确重定向到登录页面重新登录
       String sessionCode = (String)request.getSession().getAttribute("code");
       if (!code.equals(sessionCode)){
            request.setAttribute("username", username);
            request.setAttribute("password", password);
            request.setAttribute("msg", "验证码错误");
           //跳转到登陆页面
           return  "forward:/login.jsp";

       }
        //调用业务层校验用户名密码
       UserService userService = new UserServiceImpl();
       User user = userService.login(username, password);
       //判断用户名密码是否正确
       if (user ==null){
            request.setAttribute("username", username);
            request.setAttribute("password", password);
            request.setAttribute("msg", "用户名或者密码错误");
            //跳转到页面
           return "forward:/login.jsp";
       }
       //登陆成功 将用户信息存在to'mcat的session中一直携带
       request.getSession().setAttribute("loginUser",user);

        return "redirect:/goods?method=index";
   }

    /**
     * 用户注册
     * @param request
     * @param response
     * @return
     */
    public String register(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException {
   //获取页面传入的所有参数 key是input空的属性 value是用户输入的值
        Map<String, String[]> parameterMap = request.getParameterMap();//这里已经把参数都拿到了
        //将参数封装到user对象中
        //创建用户对象
         User user =new User();
        //利用beanUtils工具类, 将map中的数据全部自动set到user对象中
        //使用要求: user对象的属性名必须和页面input框的name属性一致, 实体类必须实现Serializable序列化接口
        BeanUtils.populate(user,parameterMap);// 这是工具类  不需要你操作  自动帮你找对应的值存入parameterMap 就是所有的值
        //调用service 将用户对象保存到数据库中
        UserService userService = new UserServiceImpl();
        int count = userService.createUser(user);
        if (count>Constants.ROLE_CUSTOMER){
            //注册成功
            return "redirect:/registerSuccess.jsp";
        }
        //注册成功
        return "redirect:/register.jsp";
    }
}
